#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
视频生成系统 Web UI 启动脚本

使用方法:
    python run.py [选项]

选项:
    --host HOST     绑定主机 (默认: 0.0.0.0)
    --port PORT     绑定端口 (默认: 5000)
    --debug         开启调试模式
    --reload        开启自动重载
    --help          显示帮助信息
"""

import os
import sys
import argparse
from pathlib import Path

# 添加项目根目录到路径
project_root = Path(__file__).parent.parent.parent
sys.path.insert(0, str(project_root))

# 导入Flask应用
from app import app, socketio


def check_dependencies():
    """检查依赖是否安装"""
    missing_deps = []

    try:
        import flask
    except ImportError:
        missing_deps.append('Flask')

    try:
        import flask_socketio
    except ImportError:
        missing_deps.append('Flask-SocketIO')

    if missing_deps:
        print("\n❌ 缺少必要的依赖包:")
        for dep in missing_deps:
            print(f"   - {dep}")
        print("\n请运行以下命令安装依赖:")
        print("   pip install -r requirements.txt\n")
        return False

    return True


def print_banner():
    """打印启动横幅"""
    banner = """
╔══════════════════════════════════════════════════════════════╗
║                                                              ║
║         🎬 视频生成系统 Web UI v1.0.0 🎬                    ║
║                                                              ║
║         基于AI技术的教学视频生成平台                          ║
║                                                              ║
╚══════════════════════════════════════════════════════════════╝
"""
    print(banner)


def main():
    """主函数"""
    parser = argparse.ArgumentParser(
        description='视频生成系统 Web UI',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例:
    python run.py                      # 使用默认配置启动
    python run.py --debug              # 开启调试模式
    python run.py --port 8080          # 指定端口8080
    python run.py --host 127.0.0.1     # 仅本机访问
    python run.py --debug --reload     # 调试模式 + 自动重载
        """
    )

    parser.add_argument(
        '--host',
        default='0.0.0.0',
        help='绑定主机 (默认: 0.0.0.0)'
    )

    parser.add_argument(
        '--port',
        type=int,
        default=5000,
        help='绑定端口 (默认: 5000)'
    )

    parser.add_argument(
        '--debug',
        action='store_true',
        help='开启调试模式'
    )

    parser.add_argument(
        '--reload',
        action='store_true',
        help='开启自动重载 (代码变更时自动重启)'
    )

    args = parser.parse_args()

    # 打印横幅
    print_banner()

    # 检查依赖
    print("🔍 检查依赖...")
    if not check_dependencies():
        sys.exit(1)

    print("✅ 依赖检查通过\n")

    # 显示启动信息
    print("📊 启动信息:")
    print(f"   🌐 主机地址: http://{args.host}:{args.port}")
    print(f"   🔧 调试模式: {'开启' if args.debug else '关闭'}")
    print(f"   🔄 自动重载: {'开启' if args.reload else '关闭'}")
    print(f"   📁 工作目录: {Path.cwd()}")
    print()

    # 启动服务
    try:
        print("🚀 正在启动服务...")
        print("   按 Ctrl+C 停止服务\n")
        print("=" * 60)
        print()

        # 启动SocketIO应用
        socketio.run(
            app,
            host=args.host,
            port=args.port,
            debug=args.debug,
            use_reloader=args.reload,
            log_output=True
        )

    except KeyboardInterrupt:
        print("\n\n" + "=" * 60)
        print("👋 服务已停止")
        print("感谢使用视频生成系统！")
        print("=" * 60)
        sys.exit(0)
    except Exception as e:
        print(f"\n❌ 启动失败: {e}")
        print("\n💡 故障排除:")
        print("   1. 检查端口是否被占用")
        print("   2. 检查防火墙设置")
        print("   3. 确认依赖包已正确安装")
        print("   4. 查看错误日志获取更多信息")
        sys.exit(1)


if __name__ == '__main__':
    main()
